#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>

//int main()
//{
//	char a = 'a', b;
//	printf("%c,", ++a);
//	printf("%c\n", b = a++);
//	return 0;
//}

//int main()
//{
//	int a[12] = { 1,2,3,4,5,6,7,8,9,10,11,12 }, * p[4], i;
//	for (i = 0; i < 4; i++)
//		p[i] = &a[i * 3];
//	printf("%d\n",p[3][2]);
//	return 0;
//}

//void is_self(int* n)
//{
//    int tmp = *n;
//    while (tmp > 0)
//    {
//        if (tmp % 10 == 0)
//        {
//            *n = 0;
//            break;
//        }
//        if ((*n) % (tmp % 10) != 0)
//        {
//            *n = 0;
//            break;
//        }
//        tmp /= 10;
//    }
//}
//
//int* selfDividingNumbers(int left, int right, int* returnSize)
//{
//    int i = 0;
//    int count = 0;
//    int num = right - left + 1;
//    int* array1 = NULL;
//    int* array2 = NULL;
//    array1 = (int*)malloc(num * sizeof(int));
//    if (array1 != NULL)
//    {
//        for (i = 0; i < num; i++)
//        {
//            array1[i] = left++;
//        }
//    }
//    for (i = 0; i < num; i++)
//    {
//        is_self(&array1[i]);
//        if (array1[i] == 0)
//        {
//            count++;
//        }
//    }
//    array2 = (int*)malloc((num - count) * sizeof(int));
//    if (array2 != NULL)
//    {
//        int j = 0;
//        for (i = 0; i < num; i++)
//        {
//            if (array1[i] != 0)
//            {
//                array2[j] = array1[i];
//                j++;
//            }
//        }
//    }
//    return array2;
//}
//
//int main()
//{
//    int* tmp = NULL;
//    int* arr = selfDividingNumbers(1, 22, tmp);
//    int i = 0;
//    for (i = 0; i < 22; i++)
//    {
//        printf("%d ", arr[i]);
//    }
//    return 0;
//}

int* productExceptSelf(int* nums, int numsSize, int* returnSize)
{
    int* ans = (int*)malloc(numsSize * sizeof(int));
    *returnSize = 0;
    for (*returnSize = 0; *returnSize < numsSize; (*returnSize)++)
    {
        int ret = 1;
        int j = 0;
        for (j = 0; j < numsSize; j++)
        {
            if (j == *returnSize)
            {
                continue;
            }
            ret *= nums[j];
        }
        ans[*returnSize] = ret;
    }
    return ans;
}